如果當你在ViewModel中宣告一個SharedFlow
val shareFlow = MutableShareFlow<Int>()
在使用時候你會發現emit是一個suspend function ,所以都必須透過coroutineScope來呼叫
class MyViewModel: ViewModel{
val shareFlow = MutableShareFlow<Int>()
fun test() {
viewModelScope.launch {
shareFlow.emit(3)
}
}
}
然後你會發現,他其實有一個tryEmit,而且還不需要透過coroutineScope來執行,這樣不是超級方便的嗎,少寫很多行
結果你發現你改寫這樣後
class MyViewModel: ViewModel{
val shareFlow = MutableShareFlow<Int>()
fun test() {
shareFlow.tryEmit(3)
}
}
居然就沒反應了,先說結果,其實你誤用tryEmit這個funciton了
根據說明
tryEmit 其實他是當下讓你用來測試當下是否能夠進行emit,如果buffer已經滿了,他回透過回傳boolean來告訴你,你可以藉著進行一些處理
因此不要會誤以為tryEmit就是一個不需要加上coroutineScope的方法。